import type { Ora } from 'ora'

import ora from 'ora'

interface SpinnerOptions {
    failedText?: string
    successText?: string
    title: string
}
export async function spinner<T>(
    { failedText, successText, title }: SpinnerOptions,
    callback: () => Promise<T>
): Promise<T> {
    const loading: Ora = ora(title).start()

    try {
        const result = await callback()
        loading.succeed(successText || 'Success!')
        return result
    } catch (error) {
        loading.fail(failedText || 'Failed!')
        throw error
    } finally {
        loading.stop()
    }
}
